Development - #46
Merged
Merged
Conversation
These files came from a generic polyglot project template
(Tauri-App-Template) and assumed a multi-language monorepo with
Python/Kotlin/Java/Rust/Go/C++ modules, cloud infra, and multi-host
CI. This repo is a single-language Next.js/React/TypeScript static
site deployed to GitHub Pages, plus a small Python/uv notebooks
workspace for report research — so the irrelevant pieces are removed:
- .forgejo/, .gitea/, .gitlab/: not hosted on those platforms
- cloud/, infra/: no cloud/container infra for a static export site
- git/: GitHub Project board automation and generic template CONTRIBUTING
- docs/{ARCHITECTURE,BENCHMARKS,DEPENDENCIES,DEPENDENCY_POLICY,
DEVELOPMENT,DOCUMENTATION_STANDARDS,GLOSSARY,TESTING,TROUBLESHOOTING}.md,
docs/adr/, docs/moon/{ROADMAP,CHANGELOG}.md, docs/moon/roadmaps/:
described modules/roadmaps that don't exist here
- .agent/rules/{go,kotlin,java,cpp,rust,ai_ml}.md,
.agent/workflows/{rust,data_eng,ai_ml,deployment_ops}.md,
.agent/skills/add-language-module.md,
.agent/prompts/cli_generation.md: languages/workflows unused here
The two genuine research write-ups under docs/moon/research and
docs/moon/reports move to docs/research/ since they're real content
about this project, not template placeholders.
- ci.yml: replace the polyglot lint/test/build matrix with lint + tsc + jest + cypress + a next build check, plus a light ruff pass over notebooks/. - security.yml: npm audit + pip-audit (uv) for notebooks/, drop cargo-audit. - Remove agent_sync.yml (GitHub Project board automation tied to the deleted git/ scripts) and docs.yml (no MkDocs site here). - Issue/PR templates: swap the language-module dropdown for the site's actual content areas (posts/reports/projects/tools/etc). - dependabot.yml: add npm and uv (notebooks/) ecosystems alongside the existing github-actions one; bump cadence to weekly. - .pre-commit-config.yaml: eslint/tsc for the site, ruff/mypy for notebooks/, drop the other five language toolchains. - .devcontainer: Node + Python(uv) only, drop Rust/Go/JVM toolchains. - pyproject.toml: fix license file reference (LICENSE, not LICENSE.md).
AGENTS.md, the TS/React and Python rule files, the build-and-test and debug-crash skills, and the master_context/architecture_analysis/ documentation_update/feature_implementation prompts all described a generic polyglot template (multi-language modules, Vitest, Tauri, MkDocs, just recipes). Rewritten to reflect what's actually here: a static-export Next.js/React/TypeScript site with Jest+Cypress tests, and a small notebooks/ Python-uv workspace for report research. Also swapped the domain-specific examples in the six subagent delegation protocol files (Rust/C++ refactors, PySide6 GUIs, RL reward functions, OpenCV bindings) for ones grounded in this repo — drafting report prose, reviewing notebook analysis code, refactoring React components — while keeping the PCVRP example where it already matched an existing report.
Not part of the intended cleanup; unrelated content that ended up staged alongside the .agent/ changes.
Replace the plain tech list and course-template boilerplate with a badge-based header (stack + CI/deploy status + license), a project structure overview, and concrete getting-started/testing/deployment instructions, following the style of Image-Toolkit/nglab/WSmart-Route.
Restored copies of .forgejo/, .gitea/, .github/, .gitlab/, and git/ still described a polyglot python/typescript/kotlin/java/rust/go/cpp project and referenced the source template by name. Rewritten so every file reflects only this repository: - ci.yml (all three CI hosts) and .gitlab-ci.yml: lint/typecheck/jest/ cypress/build for the Next.js site, ruff for notebooks/ — no cargo/gradle/mvn/cmake/go steps. - security.yml: npm audit + pip-audit only. - benchmark.yml: Lighthouse against the static export, no explanatory commentary about what it replaces. - docs.yml / docs-link-check: a real lychee link-check job over docs/, not a manual no-op with a "restore this later" comment. - agent_sync.yml / agent-sync.yml / the sync stage in .gitlab-ci.yml: same real job on every host — it only ever talks to GitHub's Projects (V2) API regardless of which CI runs it, so the "not portable to Forgejo/Gitea/GitLab" guard was wrong and is gone. - Issue/PR/MR templates: content-area dropdown instead of a language-module dropdown, on every host. - git/CONTRIBUTING.md, git/README.md, git/config/*, git/hooks/*, git/scripts/*: rewritten/restored with no template name, no "ported from <other repo>" attribution, and a component label set (site/content/notebooks/ci-automation/docs) that matches this repo instead of one label per unused language. None of this repo's directories were removed. A handful of files with zero applicability to this project (per-language rule/roadmap files, the template's own dev-tool roadmap) were deleted outright rather than kept with a "not applicable" banner, per explicit instruction.
- git/pyproject.toml: declare the git scripts' actual runtime deps (pyyaml, requests, google-genai) and a setuptools build so `scripts` is installable as a package, matching sync_backlog.py/ check_commit_ref.py now importing agent_tools via a relative import (`from .agent_tools import ...`), which requires running as git.scripts.<module> rather than as a bare script. - Register "git" as a uv workspace member alongside "notebooks" in the root pyproject.toml. - Update every agent_sync/agent-backlog-sync CI job (GitHub, Gitea, Forgejo, GitLab) to `uv sync --project git` and invoke `python -m git.scripts.sync_backlog` instead of a direct file path. - Update git/hooks/post-commit and post-commit.bat the same way for check_commit_ref.py, using `uv run --project git` from the repo root.
docs/*.md, docs/adr/0001, docs/moon/ROADMAP.md, docs/moon/CHANGELOG.md,
and three of the docs/moon/roadmaps/ files had been emptied out to
clear any remaining template content. Written fresh, describing only
this repository:
- docs/*.md: architecture, dependencies, dev setup, testing,
troubleshooting, docs standards, glossary, benchmarks — all for the
actual Next.js + notebooks/ + git/ stack, no leftover framing about
what any of this used to describe.
- docs/adr/0001: restored (generic ADR practice, no template content).
- docs/moon/ROADMAP.md: now points at per-theme roadmaps instead of
a scaffolding-adoption tracker.
- docs/moon/roadmaps/{user_interface,interactive_features,
mathematical_optimization,machine_learning,documentation}.md:
rewritten as a forward-looking, feature-themed roadmap for the site
(3D/motion UI, interactive graphics, an in-browser PCVRP demo,
client-side ML, docs upkeep), drawing on docs/moon/research/.
- cloud/aws/cfn-template.yaml, cloud/azure-pipelines/azure-pipelines.yml,
cloud/serverless/serverless.yml: real, working configs to deploy the
static export to AWS (S3 + CloudFront, via CloudFormation or the
Serverless Framework) and Azure Static Web Apps, as alternatives to
the GitHub Pages deploy this repo actually uses.
Replaced the inherited Python+Postgres+Redis backend stack with infra that actually deploys this repo: build the Next.js static export and serve it via nginx. - infra/docker/: Dockerfile now does npm run build then serves out/ via nginx (new nginx.conf); docker-compose.yml/prod.yml drop the db/redis services down to a single `site` service; removed entrypoint.sh (no database to wait for). - infra/k8s/: Deployment/Service/Ingress renamed from tauri-app-template to github-pages, port 8000 -> 80, readiness probe points at `/`; removed the ConfigMap (nothing left to configure via env vars). - infra/helm/: renamed the tauri-app-template/ chart directory to github-pages/ and updated Chart.yaml/values.yaml/templates to match; removed its ConfigMap template too. - infra/terraform/: provisions a real aws_ecr_repository for the built image instead of an empty placeholder; project_name/bucket names updated from tauri-app-template to github-pages. - infra/ansible/: role now installs Docker and runs the built image directly instead of templating a .env file for a Python app. - Every README rewritten to describe what's actually here, with no "not currently used"/"dormant"/"inherited from the template" framing.
- Add vitest, @vitejs/plugin-react, jsdom, msw, @testing-library/user-event;
remove jest, jest-environment-jsdom, ts-jest, @types/jest.
- vitest.config.ts: jsdom environment, @/* alias matching tsconfig,
globals enabled, CSS processing disabled (the repo's postcss.config.js
uses Next.js-style string plugin names Vite's loader can't resolve).
- test/vitest.setup.ts: jest-dom matchers plus MSW server lifecycle
(see the next commit for the integration tests that use it).
- Move src/components/__tests__/*.test.tsx to test/unit/components/,
mirroring the src/components/{layout,ui}/ layout, converting
jest.fn()/jest.mock() to vi.fn()/vi.mock().
- package.json: test -> vitest run, test:watch -> vitest, plus new
test:unit/test:integration scripts.
All 9 suites (25 tests) pass under `npm run test:unit`.
- layout.integration.test.tsx: mounts ClientLayoutWrapper (Header + Sidebar + Footer together) and verifies the theme toggle and localStorage persistence flow across all three. - navigation-active-state.integration.test.tsx: verifies a pathname change flows through ClientLayoutWrapper's getActiveSection into the correct Sidebar item being marked active. - github-profile.integration.test.ts: exercises the MSW-backed network layer itself (default handler, per-test override, and that a truly unhandled request is rejected instead of hitting the real network). Also fixes two environment issues surfaced by these tests: - vitest.config.ts: set environmentOptions.jsdom.url so jsdom's APIs that require an origin work correctly. - test/vitest.setup.ts: Node's own built-in `localStorage` global (stable since Node 22) shadows jsdom's window.localStorage with a non-functional stub when no --localstorage-file is configured; replaced with a small in-memory Storage polyfill, reset between tests. 12 test files, 33 tests, all passing under `npm test`.
- test/cypress/e2e/*.cy.js: moved as-is (2 pre-existing failures in
navigation.cy.js/other.cy.js predate this move, matching the stale
failure screenshots that were committed alongside them).
- test/cypress/cypress.config.js: moved from repo root; specPattern
now covers both e2e/ and smoke/, explicit screenshots/videos folders.
- test/cypress/smoke/: new — smoke.cy.js checks every top-level route
renders the header/main/footer shell and the homepage logs no
console errors; theme-toggle.cy.js checks the dark/light toggle.
- Dropped the committed cypress/screenshots/ failure artifacts and
gitignored test/cypress/{screenshots,videos}.
- package.json: cypress:open/run/e2e/smoke scripts now `cd
test/cypress` first — Cypress resolves --spec relative to cwd
regardless of --config-file/--project, so that's the only way to
point it at the moved specs.
Verified against a running `npm run dev`: 10/10 smoke tests pass,
8/10 e2e tests pass (the 2 pre-existing failures unchanged).
- CI (GitHub, Gitea, Forgejo, GitLab): run test:unit + test:integration
instead of the old jest --ci --coverage invocation; Cypress steps use
working-directory: test/cypress (GitHub-style action) or `cd
test/cypress` (GitLab), since Cypress resolves spec globs relative to
the current working directory regardless of --config-file/--project.
- tsconfig.json: add "types": ["vitest/globals"] so `tsc --noEmit`
(used by CI and the pre-commit hook) recognizes describe/it/expect/vi
in test files instead of erroring on every one of them.
- package.json: postbuild script symlinks out/github-pages -> . so a
plain `serve` of the static export answers under the /github-pages
basePath locally, the same way GitHub Pages does — needed for the
Cypress and Lighthouse CI jobs that serve the production build.
- docs/TESTING.md, docs/DEVELOPMENT.md, docs/TROUBLESHOOTING.md,
README.md, git/CONTRIBUTING.md, .agent/{AGENTS.md,rules/
typescript_react.md,skills/{build-and-test,debug-crash}.md,prompts/
feature_implementation.md}: replaced every Jest/root-cypress
reference with the Vitest/RTL/MSW/test-cypress equivalents.
- docs/moon/CHANGELOG.md: logged the migration; docs/moon/ROADMAP.md:
updated the S3 item; docs/moon/roadmaps/infrastructure_and_testing.md:
filled in with what's done (Vitest migration, MSW integration tests,
Cypress move + smoke tests, the postbuild basePath fix, CI wiring)
and what's left (coverage reporting, two pre-existing e2e failures).
- .gitignore: test/cypress/{screenshots,videos}, *.tsbuildinfo.
Full `npm run lint && npx tsc --noEmit && npm test && npm run build`
passes.
docs/website/react/, following the pattern of the docs/website/vue site in Project-Mobile-Fortress (a documentation portal + component catalogue for the repo), but built from a different stack per this project's actual needs: - Docusaurus (classic preset) serves this repo's docs/ directly (no copy step — the docs-plugin's `path` points straight at ../../) plus a curated set of outside-docs guides (README.md, git/CONTRIBUTING.md, .agent/AGENTS.md) on a second plugin instance. - TypeDoc + typedoc-plugin-markdown generates API reference for lib/'s exported functions/types (`npm run gen:api`), registered on the same docs-plugin instance as the rest of docs/ since it's physically nested there. - Storybook (@storybook/react-vite) renders the real src/components/ sources (via a site-src/ symlink, not a copy) with a dark/light theme toggle and Tailwind wired in for accurate styling; Next.js-only imports (next/image, next/link, next/navigation) get small shims since this runs on plain Vite. - `npm run build` chains gen:api -> build-storybook -> docusaurus build -> copies the Storybook output into build/storybook/, so the whole dashboard ships as one static site. Two real upstream issues surfaced and worked around, documented inline where they're worked around and in react/README.md's "Notable implementation gotchas": - A Docusaurus 3.10 bug mis-resolves the webpack import for a doc whose docs-plugin `include` lists it under a *different* plugin instance's `path` than where it's physically nested — fixed by registering the generated API docs on the plugin instance that actually owns docs/ on disk. - vite-plugin-react-docgen-typescript (Storybook's prop-table generator) never attaches docgen info to files outside its own project directory, symlink or no — every story ships hand-written argTypes (control + description per prop) as a working substitute, documented as a known limitation rather than papered over. Also pinned lucide-react to 0.469.0 (React 19 support with the same icon names as the main site's 0.383.0) and Vite to ^5 (the default Vite 8 that @storybook/react-vite pulls in fails to parse JSX in a few story files).
You were right to question it: the symlink (ln -s ../../../src site-src) existed solely to try to get vite-plugin-react-docgen-typescript to treat the real src/components/ files as inside this project, but it never actually worked — docgen still skipped every component with the symlink in place (verified before this change: 8 "not included in the active TypeScript project" warnings either way). So it bought nothing and just added a layer of indirection to explain. Stories now import straight from ../../../../src/components/... with no symlink involved. Simplified .storybook/main.ts back to a plain alias map (no preserveSymlinks, no alias-ordering workaround needed now that there's no @/site-src vs @ collision to avoid). Updated both READMEs' "how it works" sections and global.d.ts's comment to match. Verified: npm run typecheck and the full npm run build (TypeDoc -> Storybook -> Docusaurus -> merge) both still pass.
…mponents under frameworks/react
…g and memory gate
…d react-router-dom
Colocate AWS, Azure Pipelines, Firebase, and Serverless configs with the rest of infrastructure tooling under infra/. Co-authored-by: Grok <grok@x.ai>
…rnal) Move public-facing deployment tooling under infra/global/ (docker, k8s, helm, terraform, ansible, cloud, wordpress) and developer-only tooling under infra/private/ (webpack). Update path references accordingly. Co-authored-by: Grok <grok@x.ai>
Point README, architecture, development, and agent module maps at infra/global and infra/private. Refresh command examples and config headers for docker, ansible, serverless, Azure Pipelines, and related tooling so they match the new layout. Co-authored-by: Grok <grok@x.ai>
Treat the WordPress theme scaffold as developer-only tooling under infra/private/wordpress and update docs/path headers accordingly. Co-authored-by: Grok <grok@x.ai>
Move managed cloud static-host configs from infra/global/cloud to infra/cloud and refresh docs, command examples, and config path headers. Co-authored-by: Grok <grok@x.ai>
Populate infra/server/nginx with a main config and github-pages vhost, and infra/server/proxy with Envoy reverse-proxy bootstraps, plus READMEs and development command pointers. Co-authored-by: Grok <grok@x.ai>
Complete the project-structure diagram so cloud and server sit under infra alongside global and private. Co-authored-by: Grok <grok@x.ai>
Introduce the polyglot island workstream for React/Vue/Astro/Aurelia, GraphQL/Apollo, and WASM, update the master ROADMAP to session R4 with gate G6, and cross-link simulations and infrastructure quality hooks. Co-authored-by: Grok <grok@x.ai>
Replace react-hook-form with @tanstack/react-form in src/libraries/form/useCustomForm.ts and update package dependencies. Co-authored-by: Grok <grok@x.ai>
Move .eslintrc.json into eslint/ and next.config.js plus next-env.d.ts into next/, with thin root re-exports so next lint and the Next CLI keep discovering config at the package root. Co-authored-by: Grok <grok@x.ai>
Move stack/eslint and stack/next out of the repo root and keep thin root re-exports so Next CLI and ESLint discovery continue to work. Co-authored-by: Grok <grok@x.ai>
Move island routes from src/pages into src/frameworks/astro/pages and point astro.config srcDir at the framework tree; rebuild public astro-island assets; update MFP roadmap and changelog. Co-authored-by: Grok <grok@x.ai>
Move Docusaurus/TypeDoc/Storybook app from docs/website/react/ to docs/website/ (PMF-style layout), retarget paths for one-level-up placement, point Storybook at src/frameworks/react/components, and merge site/app docs (README + APP.md). Co-authored-by: Grok <grok@x.ai>
…sland Add configs/constants/enums/graphql/hooks/interfaces/simulations/utils, src/stories lore, libraries, frameworks/react+astro, stack/eslint+next with root re-exports, postcss.config.cjs, Next/Astro scripts, root docs:* delegates, and homepage Astro island embed with static/astro-island fallback. Co-authored-by: Grok <grok@x.ai>
Scaffold multi-framework islands under docs/website/src/frameworks: Vue (mount + components + directives), Aurelia (mount + convergence app + React host wrapper), and shared framework-neutral utils. Co-authored-by: Grok <grok@x.ai>
Standalone content wrapper mirroring main-site PostWrapper/ReportWrapper: renders HTML content, loads MathJax for typesetting, and logs island lifecycle via shared framework utils. Co-authored-by: Grok <grok@x.ai>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.